// 将数组当作队列来使用

const queue = [];

// 第一次约定: 以字符串形式左侧为队列头，以字符串形式右侧为队列尾
queue.push( '顺治' ); // 在队列尾部添加元素
console.log( queue.length , queue.toString() );

queue.push( '康熙' );
console.log( queue.length , queue.toString() );

queue.push( '雍正' , '乾隆' );
console.log( queue.length , queue.toString() );

// 为 Array原型 添加函数属性
Array.prototype.peekFirst = function(){
    if( this.length > 0 ) {
        return this[ 0 ];
    }
}

// 检查队列头部元素
let head = queue.peekFirst();
console.log( head );
console.log( queue.length , queue.toString() );

// Array.prototype.shift() 删除数组首个元素
head = queue.shift();
console.log( head );
console.log( queue.length , queue.toString() );

head = queue.shift();
console.log( head );
console.log( queue.length , queue.toString() );

// 第二次约定: 以字符串形式右侧为队列头，以字符串形式左侧为队列尾
// Array.prototype.unshift(...items) 依次在数组起始位置添加元素
queue.unshift( '康熙' ); // 向队列尾部添加元素
console.log( queue.length , queue.toString() );

queue.unshift( '皇太极' , '顺治' );
console.log( queue.length , queue.toString() );

// 为 Array原型 添加函数属性
Array.prototype.peekLast = function(){
    if( this.length > 0 ) {
        return this[ this.length - 1 ];
    }
}

head = queue.peekLast();
console.log( head );
console.log( queue.length , queue.toString() );

head = queue.pop();
console.log( head );
console.log( queue.length , queue.toString() );

// 总结:
// Array.prototype.shift() 从数组中删除第一个元素，并返回该元素的值(此方法更改数组的长度)
// Array.prototype.unshift(...items) 将一个或多个元素添加到数组的开头，并返回该数组的新长度
